/**
 * javascript 试题
 * 2017-4-26 10:55:47
 */

// 求输入数组和元素的位置
const indexOf = (arr, item) => {
  return arr.indexOf(item)
}

// 求一个数组之和
const addarr = (arr) => {
  // return eval(arr.join('+'))
  return arr.reduce((f, l) => f + l)
}

// 过滤数组中的某一个元素
const filter = (arr, item) => {
  return arr.filter(t => t !== item)
}

// 删除数组中的指定元素 原数组上操作
const removeWithoutCopy = (arr, item) => {
  let i;
  while ((i = arr.indexOf(item)) > 0) {
    arr.splice(i, 1)
  }
  return arr
}

// 复制一个新数组， 并且添加元素，返回新数组
function append(arr, item) {
  var new_arr = arr.slice(0)
  new_arr.push(item)
  return new_arr
}

// 同上，删除最后一个
function truncate(arr) {
  var new_arr = arr.slice(0);
  new_arr.pop()
  return new_arr
}

// 向开头添加一个元素
function prepend(arr, item) {
  var new_arr = arr.slice(0);
  new_arr.unshift(item)
  return new_arr
}

// 指定位置，插入一个元素
function insert(arr, item, index) {
  var new_arr = arr.slice(0);
  new_arr.splice(index, 0, item)
  return new_arr
}

// 统计出现次数
function count(arr, item) {
  var n = 0;
  for (var i in arr) {
    arr[i] === item && (++n)
  }
  return n
}

// 一组数字中重复出现的数字 通过排序
function duplicates(arr) {
  var n = [];
  for (var i in arr.sort()) {
    arr[i] === arr[i - 1] && n.indexOf(arr[i]) < 0 && n.push(arr[i])
  }
  return n
}

// 求个数组的平方
function square(arr) {
  return arr.map(function (t) {
    return Math.pow(t, 2)
  })
}

// 求个相同元素出现的位置
function findAllOccurrences(arr, target) {
  var n = [];
  arr.forEach(function (v, i) {
    v === target && n.push(i)
  })
  return n
}

// 正确的parseInt parse2Int('12'); parse2Int('12px'); parse2Int('0x12') -> 12; 12; 0
function parse2Int(num) {
  return parseInt(num, 10);
}


// 重复输出一个数组
function repeatArr(m, n) {
  // map
  return eval('[' + (',' + m).repeat(n).substr(1) + ']')
}